﻿
// Personal ManagementDlg.cpp: 实现文件
//

#include "pch.h"
#include "framework.h"
#include "Personal Management.h"
#include "Personal ManagementDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_ABOUTBOX };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
public:
};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CPersonalManagementDlg 对话框



CPersonalManagementDlg::CPersonalManagementDlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_PERSONAL_MANAGEMENT_DIALOG, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CPersonalManagementDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);


	DDX_Control(pDX, IDC_LIST_DB, m_list);
}

BEGIN_MESSAGE_MAP(CPersonalManagementDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_BROWSE, &CPersonalManagementDlg::OnBnClickedButtonBrowse)
	ON_NOTIFY(NM_CLICK, IDC_LIST1, &CPersonalManagementDlg::OnNMClickList)
	ON_BN_CLICKED(IDC_BUTTON_INSERT, &CPersonalManagementDlg::OnBnClickedButtonInsert)
	ON_BN_CLICKED(IDC_BUTTON_SORT, &CPersonalManagementDlg::OnBnClickedButtonSort)
	ON_BN_CLICKED(IDC_BUTTON_DELETE, &CPersonalManagementDlg::OnBnClickedButtonDelete)
	ON_BN_CLICKED(IDC_BUTTON_QUARY, &CPersonalManagementDlg::OnBnClickedButtonQuary)
END_MESSAGE_MAP()


// CPersonalManagementDlg 消息处理程序

BOOL CPersonalManagementDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != nullptr)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时，框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码

	// 设计list表格的样式
	DWORD dwstyle = m_list.GetExtendedStyle(); // 获取起始表格样式

	dwstyle = dwstyle | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES; // 选中整行 + 行列分割线
	m_list.SetExtendedStyle(dwstyle);

	return TRUE;  // 除非将焦点设置到控件，否则返回 TRUE
}

void CPersonalManagementDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮，则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序，
//  这将由框架自动完成。

void CPersonalManagementDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CPersonalManagementDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}





void CPersonalManagementDlg::DispBySql(CString sql)
{
	CRecordset rs(&m_db);
	rs.Open(CRecordset::dynaset, sql, CRecordset::none);

	// 1、获取列的数目
	short sFieldCount = rs.GetODBCFieldCount(); // 获取filed的数量， 其实就是有多少列
	if (sFieldCount <= 0) {
		return;
	}

	// 2、清空列表框中的数目, 并重绘

	// 将显示框绑定一个变量m_list，可以通过这个变量来操作这个列表框
	m_list.DeleteAllItems(); // 删除所有数据行

	// 删除列表控件的表头
	while (m_list.GetHeaderCtrl()->GetItemCount() > 0) {
		m_list.DeleteColumn(m_list.GetHeaderCtrl()->GetItemCount() - 1); 
	}
	// 重绘操作
	m_list.SetRedraw(TRUE);
	m_list.Invalidate();
	m_list.UpdateWindow();

	LV_COLUMN lvcolumn;
	CRect rect;
	m_list.GetClientRect(&rect); // 获取列表控件的宽高信息
	for (short column = 0; column < sFieldCount; column++) {

		CODBCFieldInfo fInfo;
		rs.GetODBCFieldInfo(column, fInfo);
		// MessageBox(fInfo.m_strName); // 这里获取的就是数据库中 职工编号 姓名 性别 所在部门 等字符串
		// 获取表头格式（左对齐）
		lvcolumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;
		lvcolumn.fmt = LVCFMT_LEFT;
		// 获取表头信息
		lvcolumn.pszText = fInfo.m_strName.GetBuffer(fInfo.m_strName.GetLength());
		fInfo.m_strName.ReleaseBuffer();

		lvcolumn.iSubItem = column;
		lvcolumn.cx = rect.Width() / sFieldCount;

		m_list.InsertColumn(column, &lvcolumn); // 插入列表框的头部，就是标题
	}

	// 显示数据
	LV_ITEM lvitem;
	CDBVariant var;
	CString value;

	while (!rs.IsEOF()) 
	{
		for (short column = 0; column < sFieldCount; column++) // 按列进行打印
		{
			rs.GetFieldValue(column, var); // 获取字段的值
			// 数据格式化
			switch (var.m_dwType)
			{
			case DBVT_STRING:
				value.Format(_T("%s"), var.m_pstring->GetBuffer(var.m_pstring->GetLength()));
				break;
			case DBVT_WSTRING:
				value.Format(_T("%s"), var.m_pstringW->GetBuffer(var.m_pstringW->GetLength()));
				break;
			case DBVT_LONG:
				value.Format(_T("%ld"), var.m_lVal);
				break;
			case DBVT_SHORT:
				value.Format(_T("%d"), var.m_iVal);
				break;
			default:
				value = _T("");
				break;
			}

			if (column == 0) // 赋值表头的字段
			{
				lvitem.mask = LVIF_TEXT;
				lvitem.iItem = m_list.GetItemCount();
				lvitem.iSubItem = column;

				lvitem.pszText = value.GetBuffer(value.GetLength()); // id 1,2,3,
				value.ReleaseBuffer();
				lvitem.cchTextMax = value.GetLength(); // 最大字符的长度

				m_list.InsertItem(&lvitem); // 添加行数据的第1列：注意第一列的打印方法是Insert，而后面几列的打印方法是Set
			}
			else
			{
				lvitem.mask = LVIF_TEXT;
				lvitem.iItem = m_list.GetItemCount() - 1; // 注意需要-1
				lvitem.iSubItem = column;

				lvitem.pszText = value.GetBuffer(value.GetLength()); 
				value.ReleaseBuffer();
				lvitem.cchTextMax = value.GetLength();

				m_list.SetItem(&lvitem); // 添加行数据的第 2-n列
			}
		}
		// 一行打印完毕，移动到下一行（按行进行移动）
		rs.MoveNext();
	}
}

// 浏览的一个消息处理函数
void CPersonalManagementDlg::OnBnClickedButtonBrowse()
{
	// TODO: 在此添加控件通知处理程序代码
	// 文件名过滤器：只允许三种文件类型被过滤出来
	TCHAR szFilter[] = _T("Access2003数据库文件(*.mdb)|*.mdb|Access2007数据库文件(*.accdb)|*.accdb|所有文件(*.*)|*.*||");

	// 定义一个文件对话框：打开文件
	// TRUE-打开一个文件，弹出打开对话框；如果参数为FALSE，则打开另存为对话框
	// 打开文件的文件扩展名；
	// szFilter-文件名过滤器；this-指定在哪个对话框
	CFileDialog fileDlog(TRUE, _T(".accdb"), NULL, 0, szFilter, this);

	CString filePath;
	// 如果成功打开，选择文件名
	if (IDOK == fileDlog.DoModal())
	{
		filePath = fileDlog.GetPathName(); // 获取到选中文件的路径
		// 将文件路径显示到路径对话框中
		SetDlgItemText(IDC_EDIT_PATH, filePath);
	}

	// 打开数据库--通过database类实现

	if (m_db.IsOpen()) // 判读数据库是否已经被打开过
	{
		// 如果被打开，需要先关闭数据库
		m_db.Close();
	}

	// 链接字符串
	TCHAR szConnect[1000] = _T("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=");
	wcscat_s(szConnect, filePath);
	wcscat_s(szConnect, _T(";"));

	BOOL result = FALSE;
	// 通过链接字符串和OpenEx打开数据库（需要提前安装链接数据库的驱动）
	result = m_db.OpenEx(szConnect, CDatabase::noOdbcDialog);
	
	// 根据返回值，判断数据库是否打开成功
	if (result)
	{
		// MessageBox(_T("数据库打开成功!"));

		// 得到sql语句
		CString sql = _T("SELECT Personal_Management.[职工编号], Personal_Management.[职工姓名], Personal_Management.[职工性别], Personal_Management.[所在部门], Personal_Management.[职工年龄], Personal_Management.[工作时间], Personal_Management.[基本工资], Personal_Management.[职称] FROM Personal_Management ORDER BY Personal_Management.[职工编号] ASC");

		// 通过失sql语句，将数据库中的文件显示出来
		DispBySql(sql);
	}
	else
	{
		MessageBox(_T("数据库打开失败!"));
	}
}




// 当点击一个条目时，将内容显示在下面的条形框中
void CPersonalManagementDlg::OnNMClickList(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
	NMLISTVIEW* pListView = (NMLISTVIEW*)pNMHDR;

	
	if (pListView->iItem != -1)
	{
		// pListView->iItem代表目前选中的是哪一行
		CString str_zgbh = m_list.GetItemText(pListView->iItem, 0); // 获取该行的第1个字段 职工编号
		CString str_zgxm = m_list.GetItemText(pListView->iItem, 1); // 获取该行的第2个字段 职工姓名
		CString str_zgxb = m_list.GetItemText(pListView->iItem, 2); // 获取该行的第3个字段 职工性别
		CString str_szbm = m_list.GetItemText(pListView->iItem, 3); // 获取该行的第4个字段 所在部门
		CString str_zgnl = m_list.GetItemText(pListView->iItem, 4); // 获取该行的第5个字段 职工年龄
		CString str_gzsj = m_list.GetItemText(pListView->iItem, 5); // 获取该行的第6个字段 工作时间
		CString str_jbgz = m_list.GetItemText(pListView->iItem, 6); // 获取该行的第7个字段 基本工资
		CString str_zc = m_list.GetItemText(pListView->iItem, 7); // 获取该行的第8个字段 职称

		// 将读取到的数据显示到文本框中
		SetDlgItemText(IDC_EDIT_ZGBH, str_zgbh);
		SetDlgItemText(IDC_EDIT_ZGXM, str_zgxm);
		SetDlgItemText(IDC_EDIT_ZGXB, str_zgxb);
		SetDlgItemText(IDC_EDIT_SZBM, str_szbm);
		SetDlgItemText(IDC_EDIT_ZGNL, str_zgnl);
		SetDlgItemText(IDC_EDIT_GZSJ, str_gzsj);
		SetDlgItemText(IDC_EDIT_JBGZ, str_jbgz);
		SetDlgItemText(IDC_EDIT_ZC, str_zc);
	}

	
}


void CPersonalManagementDlg::OnBnClickedButtonInsert()
{
	// TODO: 在此添加控件通知处理程序代码

	CString str_zgbh, str_zgxm, str_zgxb, str_szbm, str_zgnl, str_gzsj, str_jbgz, str_zc;

	// 将读取到的数据显示到文本框中
	GetDlgItemText(IDC_EDIT_ZGBH, str_zgbh);
	GetDlgItemText(IDC_EDIT_ZGXM, str_zgxm);
	GetDlgItemText(IDC_EDIT_ZGXB, str_zgxb);
	GetDlgItemText(IDC_EDIT_SZBM, str_szbm);
	GetDlgItemText(IDC_EDIT_ZGNL, str_zgnl);
	GetDlgItemText(IDC_EDIT_GZSJ, str_gzsj);
	GetDlgItemText(IDC_EDIT_JBGZ, str_jbgz);
	GetDlgItemText(IDC_EDIT_ZC, str_zc);

	if (str_zgbh.IsEmpty())  // 至少插入一个编号
	{
		MessageBox(_T("缺少编号"), _T("插入操作"), MB_ICONWARNING);
		return;
	}
	// 如果没有填写工资和工作时间，就设置为0
	if (str_jbgz.IsEmpty()) {
		str_jbgz = _T("0");
	}
	if (str_gzsj.IsEmpty()) {
		str_gzsj = _T("0");
	}


	CString strSql;
	strSql = _T("insert into Personal_Management(职工编号,职工姓名,职工性别,所在部门,职工年龄,工作时间,基本工资,职称) values(");
	strSql += str_zgbh + _T(",\'") + str_zgxm + _T("\',\'") + str_zgxb + _T("\',\'") + str_szbm + _T("\',") + str_zgnl + _T(",\'") + str_gzsj + _T("\',") + str_jbgz + _T(",\'") + str_zc + _T("\')");	

	try {
		m_db.ExecuteSQL(strSql);
	}
	catch (CDBException* e) {
		MessageBox(_T("编号错误！！\r\n 编号已存在，或者输入的不是数字"));
		return;
	}

	// 第一个参数 0 是指在第一个行插入数据
	m_list.InsertItem(0, str_zgbh); // 插入一行，并设置改行的第一列
	m_list.SetItemText(0, 1, str_zgxm); // 设置该行的第二列
	m_list.SetItemText(0, 2, str_zgxb); // 设置该行的第三列
	m_list.SetItemText(0, 3, str_szbm); // 设置该行的第四列
	m_list.SetItemText(0, 4, str_zgnl); // 设置该行的第五列
	m_list.SetItemText(0, 5, str_gzsj); // 设置该行的第六列
	m_list.SetItemText(0, 6, str_jbgz); // 设置该行的第七列
	m_list.SetItemText(0, 7, str_zc); // 设置该行的第八列
}




// 排序的回调函数
int CALLBACK ListCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) {
	CListCtrl* pListCtrl = (CListCtrl*)lParamSort;
	// 利用职工编号进行比较
	CString strId1 = pListCtrl->GetItemText((int)lParam1, 0); // 第0个位置就是职工编号
	CString strId2 = pListCtrl->GetItemText((int)lParam2, 0);

	int iId1 = _tstoi(strId1.GetBuffer());
	int iId2 = _tstoi(strId2.GetBuffer());

	// 返回值<=0，不交换
	// 返回值>0，交换
	return iId1 - iId2;
}

// 显示排序
void CPersonalManagementDlg::OnBnClickedButtonSort()
{
	// TODO: 在此添加控件通知处理程序代码
	m_list.SortItemsEx(ListCompareFunc, (DWORD_PTR)&m_list);
}

// 删除操作
void CPersonalManagementDlg::OnBnClickedButtonDelete()
{
	// TODO: 在此添加控件通知处理程序代码

	

	// 1、获取到删除的条件（也就是获取文本框中的数据）
	CString str_zgbh, str_zgxm, str_zgxb, str_szbm, str_zgnl, str_gzsj, str_jbgz, str_zc;

	// 将读取到的数据显示到文本框中
	GetDlgItemText(IDC_EDIT_ZGBH, str_zgbh);
	GetDlgItemText(IDC_EDIT_ZGXM, str_zgxm);
	GetDlgItemText(IDC_EDIT_ZGXB, str_zgxb);
	GetDlgItemText(IDC_EDIT_SZBM, str_szbm);
	GetDlgItemText(IDC_EDIT_ZGNL, str_zgnl);
	GetDlgItemText(IDC_EDIT_GZSJ, str_gzsj);
	GetDlgItemText(IDC_EDIT_JBGZ, str_jbgz);
	GetDlgItemText(IDC_EDIT_ZC, str_zc);



	// 2、执行sql 语句

	// 当输入框中信息不全为空时，才有删除的机会；否则提示用户输入信息

	if (str_zgbh.IsEmpty() && str_zgxm.IsEmpty() && str_zgxb.IsEmpty() && str_szbm.IsEmpty() && str_zgnl.IsEmpty() && str_gzsj.IsEmpty() && str_jbgz.IsEmpty() && str_zc.IsEmpty()) 
	{
		MessageBox(_T("请输入要删除的信息"));
		return;
	}

	// 删除的语法为：delete from country where country.[编号]=13 and country.[国家]='西班牙' and country.[首都]='马德里' and country.[GDP]=14360 
	CString strSql = _T("delete from Personal_Management where ");
	// 拼接Sql语句剩余部分

	if (!str_zgbh.IsEmpty()) // 当不为空时，才进行拼接
	{
		strSql += _T("Personal_Management.[职工编号]=") + str_zgbh;
	}

	if (!str_zgxm.IsEmpty()) 
	{
		if (!str_zgbh.IsEmpty()) 
		{
			strSql = strSql + _T(" and Personal_Management.[职工姓名]=") + _T("\'") + str_zgxm + _T("\'");
		}
		else 
		{
			strSql = strSql + _T("Personal_Management.[职工姓名]=") + _T("\'") + str_zgxm + _T("\'");
		}
	}

	if (!str_zgxb.IsEmpty()) 
	{
		if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty()) 
		{
			strSql = strSql + _T(" and Personal_Management.[职工性别]=") + _T("\'") + str_zgxb + _T("\'");
		}
		else 
		{
			strSql = strSql + _T("Personal_Management.[职工性别]=") + _T("\'") + str_zgxb + _T("\'");
		}
	}

	if (!str_szbm.IsEmpty())
	{
		if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty() || !str_zgxb.IsEmpty())
		{
			strSql = strSql + _T(" and Personal_Management.[所在部门]=") + _T("\'") + str_szbm + _T("\'");
		}
		else
		{
			strSql = strSql + _T("Personal_Management.[所在部门]=") + _T("\'") + str_szbm + _T("\'");
		}
	}


	if (!str_zgnl.IsEmpty())
	{
		if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty() || !str_zgxb.IsEmpty() || !str_szbm.IsEmpty())
		{
			strSql = strSql + _T(" and Personal_Management.[职工年龄]=") + str_zgnl;
		}
		else
		{
			strSql = strSql + _T("Personal_Management.[职工年龄]=") + str_zgnl;
		}
	}

	if (!str_gzsj.IsEmpty())
	{
		if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty() || !str_zgxb.IsEmpty() || !str_zgnl.IsEmpty())
		{
			strSql = strSql + _T(" and Personal_Management.[工作时间]=") + _T("\'") + str_gzsj + _T("\'");
		}
		else
		{
			strSql = strSql + _T("Personal_Management.[工作时间]=") + _T("\'") + str_gzsj + _T("\'");
		}
	}

	if (!str_jbgz.IsEmpty())
	{
		if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty() || !str_zgxb.IsEmpty() || !str_szbm.IsEmpty() || !str_gzsj.IsEmpty())
		{
			strSql = strSql + _T(" and Personal_Management.[基本工资]=") + str_jbgz;
		}
		else
		{
			strSql = strSql + _T("Personal_Management.[基本工资]=") + str_jbgz;
		}
	}


	if (!str_zc.IsEmpty())
	{
		if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty() || !str_zgxb.IsEmpty() || !str_zgnl.IsEmpty() || !str_jbgz.IsEmpty())
		{
			strSql = strSql + _T(" and Personal_Management.[职称]=") + _T("\'") + str_zc + _T("\'");
		}
		else
		{
			strSql = strSql + _T("Personal_Management.[职称]=") + _T("\'") + str_zc + _T("\'");
		}
	}

	MessageBox(strSql);

	try {
		m_db.ExecuteSQL(strSql);
	}
	catch (CDBException* e) {
		MessageBox(_T("删除异常"));
		return;
	}

	// 3、刷新显示ListCtrl
	strSql = _T("select Personal_Management.[职工编号], Personal_Management.[职工姓名],Personal_Management.[职工性别],Personal_Management.[所在部门],Personal_Management.[职工年龄],Personal_Management.[工作时间],Personal_Management.[基本工资],Personal_Management.[职称] from Personal_Management order by Personal_Management.[职工编号] asc;");
	DispBySql(strSql);


}


void CPersonalManagementDlg::OnBnClickedButtonQuary()
{
	// TODO: 在此添加控件通知处理程序代码

	// 1、获取文本框中的数据
	CString str_zgbh, str_zgxm, str_zgxb, str_szbm, str_zgnl, str_gzsj, str_jbgz, str_zc;

	// 将读取到的数据显示到文本框中
	GetDlgItemText(IDC_EDIT_ZGBH, str_zgbh);
	GetDlgItemText(IDC_EDIT_ZGXM, str_zgxm);
	GetDlgItemText(IDC_EDIT_ZGXB, str_zgxb);
	GetDlgItemText(IDC_EDIT_SZBM, str_szbm);
	GetDlgItemText(IDC_EDIT_ZGNL, str_zgnl);
	GetDlgItemText(IDC_EDIT_GZSJ, str_gzsj);
	GetDlgItemText(IDC_EDIT_JBGZ, str_jbgz);
	GetDlgItemText(IDC_EDIT_ZC, str_zc);

	// select country.[编号], country.[国家], country.[首都],country.[GDP] from country where country.[编号]=1 and country.[国家]='中国' and country.[首都]='北京' and country.[GDP]=12333;
	CString strSql;
	// 当所有查询信息都为空时，显示所有信息
	if (str_zgbh.IsEmpty() && str_zgxm.IsEmpty() && str_zgxb.IsEmpty() && str_szbm.IsEmpty() && str_zgnl.IsEmpty() && str_gzsj.IsEmpty() && str_jbgz.IsEmpty() && str_zc.IsEmpty()) 
	{
		strSql = _T("select Personal_Management.[职工编号], Personal_Management.[职工姓名], Personal_Management.[职工性别],Personal_Management.[所在部门],Personal_Management.[职工年龄],Personal_Management.[工作时间],Personal_Management.[基本工资],Personal_Management.[职称] from Personal_Management");
	}
	else 
	{
		strSql = _T("select Personal_Management.[职工编号], Personal_Management.[职工姓名], Personal_Management.[职工性别],Personal_Management.[所在部门],Personal_Management.[职工年龄],Personal_Management.[工作时间],Personal_Management.[基本工资],Personal_Management.[职称] from Personal_Management where ");
		// 拼接Sql语句剩余部分

		if (!str_zgbh.IsEmpty()) // 当不为空时，才进行拼接
		{
			strSql += _T("Personal_Management.[职工编号]=") + str_zgbh;
		}

		if (!str_zgxm.IsEmpty())
		{
			if (!str_zgbh.IsEmpty())
			{
				strSql = strSql + _T(" and Personal_Management.[职工姓名]=") + _T("\'") + str_zgxm + _T("\'");
			}
			else
			{
				strSql = strSql + _T("Personal_Management.[职工姓名]=") + _T("\'") + str_zgxm + _T("\'");
			}
		}

		if (!str_zgxb.IsEmpty())
		{
			if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty())
			{
				strSql = strSql + _T(" and Personal_Management.[职工性别]=") + _T("\'") + str_zgxb + _T("\'");
			}
			else
			{
				strSql = strSql + _T("Personal_Management.[职工性别]=") + _T("\'") + str_zgxb + _T("\'");
			}
		}

		if (!str_szbm.IsEmpty())
		{
			if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty() || !str_zgxb.IsEmpty())
			{
				strSql = strSql + _T(" and Personal_Management.[所在部门]=") + _T("\'") + str_szbm + _T("\'");
			}
			else
			{
				strSql = strSql + _T("Personal_Management.[所在部门]=") + _T("\'") + str_szbm + _T("\'");
			}
		}


		if (!str_zgnl.IsEmpty())
		{
			if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty() || !str_zgxb.IsEmpty() || !str_szbm.IsEmpty())
			{
				strSql = strSql + _T(" and Personal_Management.[职工年龄]=") + str_zgnl;
			}
			else
			{
				strSql = strSql + _T("Personal_Management.[职工年龄]=") + str_zgnl;
			}
		}

		if (!str_gzsj.IsEmpty())
		{
			if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty() || !str_zgxb.IsEmpty() || !str_zgnl.IsEmpty())
			{
				strSql = strSql + _T(" and Personal_Management.[工作时间]=") + _T("\'") + str_gzsj + _T("\'");
			}
			else
			{
				strSql = strSql + _T("Personal_Management.[工作时间]=") + _T("\'") + str_gzsj + _T("\'");
			}
		}

		if (!str_jbgz.IsEmpty())
		{
			if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty() || !str_zgxb.IsEmpty() || !str_szbm.IsEmpty() || !str_gzsj.IsEmpty())
			{
				strSql = strSql + _T(" and Personal_Management.[基本工资]=") + str_jbgz;
			}
			else
			{
				strSql = strSql + _T("Personal_Management.[基本工资]=") + str_jbgz;
			}
		}


		if (!str_zc.IsEmpty())
		{
			if (!str_zgbh.IsEmpty() || !str_zgxm.IsEmpty() || !str_zgxb.IsEmpty() || !str_zgnl.IsEmpty() || !str_jbgz.IsEmpty())
			{
				strSql = strSql + _T(" and Personal_Management.[职称]=") + _T("\'") + str_zc + _T("\'");
			}
			else
			{
				strSql = strSql + _T("Personal_Management.[职称]=") + _T("\'") + str_zc + _T("\'");
			}
		}
	}

	MessageBox(strSql);

	try {
		//m_db.ExecuteSQL(strSql);
		DispBySql(strSql);
	}
	catch (CDBException* e) {
		MessageBox(_T("" + e->m_strError), _T("查询操作"), MB_ICONWARNING);
		return;
	}

}
